#pragma once

#include<cstdint>
#include<chrono>
#include<atomic>

using namespace std;

// 高效ID管理器
class IdManager
{
public:
    // 使用原子计数器 + 时间戳前缀生成唯一ID
    static uint64_t GetId() 
    {
        //定义原子计数器
        static std::atomic<uint32_t> counter(0);
        //使用不受系统时间影响的单调时钟steady_clock，获取当前时间戳（秒级）
        uint64_t ts = std::chrono::steady_clock::now().time_since_epoch().count();
        //使用位运算，把时间戳作为前缀
        return (ts << 32) | (++counter);
    }
};